import pickle, base64

from django_redis import get_redis_connection


def merge_cart_cookie_to_redis(request, response, user):
    # 合并购物车
    # 1、获取cookie数据
    cart_cookie = request.COOKIES.get('cart_cookie', None)
    # 2、判断cookie是否存在
    if cart_cookie is None:
        # 不存在直接返回
        return response

    # 3、解密cookie数据
    data = pickle.loads(base64.b64decode(cart_cookie))
    # 4、判断解密后的字典数据是否空
    if data is None:
        # 为空直接返回
        return response

    # 5、将数据转化为redis存储的形式
    # python对应redis中hash
    cart = {}  # 保存sku_id和count
    # 列表对应set类型
    cart_list = []  # 保存选中状态的sku_id
    cart_list_no = []  # 保存未选中状态的sku_id
    for sku_id, data_dict in data.items():
        cart[sku_id] = data_dict['count']
        # 判断选中状态
        if data_dict['selected']:
            cart_list.append(sku_id)
        else:
            cart_list_no.append(sku_id)

    # 6、数据写入redis
    # 建立连接
    conn = get_redis_connection('cart')
    # 写入hash数据  sku_id和count
    conn.hmset('cart_%s' % user.id, cart)
    # 写入set
    if cart_list:
        conn.sadd('cart_selseted_%s' % user.id, *cart_list)
    if cart_list_no:
        conn.srem('cart_selseted_%s' % user.id, *cart_list_no)

    # 7、删除cookie数据
    response.delete_cookie('cart_cookie')

    # 8、结果返回
    return response
